package cz.vse.javaee.email;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

/**
 *
 * @author  VERNER Jan
 * @version 16.3.2012
 */
public class UserSetterForEmailBean implements HttpSessionAttributeListener
{
//== CONSTANTS & FIELDS (STATIC) ===============================================
//== CONSTANTS & FIELDS ========================================================

//== CONSTRUCTORS (STATIC) =====================================================
//== CONSTRUCTORS AND FACTORY METHODS ==========================================

//== NON-PRIVATE METHODS (STATIC) ==============================================
//== NON-PRIVATE METHODS =======================================================
    
    /**
     * Odchytává událost vytvoření nového email beanu. V takovém
     * případě nastavuje beanu aktuálního uživatele.
     */
    @Override
    public void attributeAdded(HttpSessionBindingEvent event)
    {
        if ("emailBean".equals(event.getName())) {
            // Byl založen nový email bean.
            EmailBean emailBean = (EmailBean) event.getValue();
            adjustUser(event, emailBean);
        }
    }
        
    @Override
    public void attributeReplaced(HttpSessionBindingEvent event)
    {
        HttpSession session = event.getSession();
        if ("user".equals(event.getName())) {
            // Při změně uživatele odstraníme starý email bean. Jeho
            // nová instance se vytvoří až v okamžiku potřeby (např.
            // <jsp:useBean> v emailForm.jsp nebo doGet v MailServlet).
            session.removeAttribute("emailBean");
        }
        else if ("emailBean".equals(event.getName())) {
            // Byl založen nový email bean nahrazující starý. Novému
            // je třeba nastavit uživatele.
            EmailBean newEmailBean = (EmailBean)
                    session.getAttribute("emailBean");
            adjustUser(event, newEmailBean);
        }
    }
    
    @Override
    public void attributeRemoved(HttpSessionBindingEvent event) {
        // do nothing
    }
    

//== PRIVATE METHODS (STATIC) ==================================================
//== PRIVATE METHODS ===========================================================
    
    private void adjustUser(HttpSessionBindingEvent event,
                            EmailBean emailBean)
    {
        String user = (String) event.getSession().getAttribute("user");
        emailBean.setUser(user);
    }
        
        
//== NESTED TYPES ==============================================================

//== MAIN METHOD (TEST) ========================================================

//    /**
//     * @param args the command line arguments
//     */
//    public static void main(String[] args)
//    {
//        
//    }
}
